Because Inno Setup is a 32-bit application, there are some limitations to be aware of when utilizing its 64-bit installation features:
- The {sys} constant and windows\system32 do not always map to the 64-bit System directory. When Setup/Uninstall is running in 64-bit mode, it maps to the 64-bit System directory when used in the [Dirs], [Files], [InstallDelete], [Run], [UninstallDelete], and [UninstallRun] sections because Setup temporarily disables WOW64 file system redirection when files/directories are accessed by those sections. Elsewhere, the {sys} constant and windows\system32 map to the 32-bit System directory, as is normal in a 32-bit process.
-
In the [Code] section, when Setup/Uninstall is running in 64-bit mode, functions that access files disable WOW64 file system redirection. However, there are exceptions, listed below. These functions do not disable file system redirection, meaning you cannot pass them (or get back) the name of a file located in the 64-bit System directory:
*Ini* | (all of the functions that manipulate .INI files) |
BrowseForFolder |
CreateShellLink |
GetOpenFileName |
LoadDLL | (see following point) |
ModifyPifFile |
SetCurrentDir |
ShellExec | (use Exec instead) |
UnregisterFont |
Additionally, no VCL classes are capable of disabling file system redirection. For example, you cannot call the LoadFromFile method of TBitmap to load a bitmap file from the 64-bit System directory.
- You cannot load/use 64-bit DLLs in the [Code] section, because Windows does not allow 32-bit processes to load 64-bit DLLs (and vice versa). A 32-bit process can, however, launch 64-bit EXEs. Use the Exec function or the [Run] section to do that.
Also, there is one limitation of the compiler:
- You cannot compile a script that includes 64-bit binaries on Windows 95, 98, Me, or NT 4.0, because those versions of Windows do not support reading version info on 64-bit images.